home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / gnugo1_1.lha / gnugo / opening.c < prev    next >
C/C++ Source or Header  |  1989-03-07  |  2KB  |  93 lines

  1. /*
  2.                 GNU GO - the game of Go (Wei-Chi)
  3.                 Version 1.1   last revised 3-1-89
  4.            Copyright (C) Free Software Foundation, Inc.
  5.                       written by Man L. Li
  6.                       modified by Wayne Iba
  7.                     documented by Bob Webber
  8. */
  9. /*
  10. This program is free software; you can redistribute it and/or modify
  11. it under the terms of the GNU General Public License as published by
  12. the Free Software Foundation - version 1.
  13.  
  14. This program is distributed in the hope that it will be useful,
  15. but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. GNU General Public License in file COPYING for more details.
  18.  
  19. You should have received a copy of the GNU General Public License
  20. along with this program; if not, write to the Free Software
  21. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  
  23. Please report any bug/fix, modification, suggestion to
  24.  
  25. mail address:   Man L. Li
  26.                 Dept. of Computer Science
  27.                 University of Houston
  28.                 4800 Calhoun Road
  29.                 Houston, TX 77004
  30.  
  31. e-mail address: manli@cs.uh.edu         (Internet)
  32.                 coscgbn@uhvax1.bitnet   (BITNET)
  33.                 70070,404               (CompuServe)
  34. */
  35.  
  36. #include <stdio.h>
  37.  
  38. extern int rd;
  39.  
  40. opening(i, j, cnd, type)
  41. /* get move for opening from game tree */
  42. int *i, *j, *cnd, type;
  43. {
  44.  struct tnode {
  45.    int i, j, ndct, next[8];
  46.   };
  47.  
  48.  static struct tnode tree[] = {
  49.   {-1, -1, 8, { 1, 2, 3, 4, 5, 6, 7, 20}},    /* 0 */
  50.   {2, 3, 2, { 8, 9}},
  51.   {2, 4, 1, {10}},
  52.   {3, 2, 2, {11, 12}},
  53.   {3, 3, 6, {14, 15, 16, 17, 18, 19}},
  54.   {3, 4, 1, {10}},  /* 5 */
  55.   {4, 2, 1, {13}},
  56.   {4, 3, 1, {13}},
  57.   {4, 2, 0},
  58.   {4, 3, 0},
  59.   {3, 2, 0},  /* 10 */
  60.   {2, 4, 0},
  61.   {3, 4, 0},
  62.   {2, 3, 0},
  63.   {2, 5, 1, {10}},
  64.   {2, 6, 1, {10}},  /* 15 */
  65.   {3, 5, 1, {10}},
  66.   {5, 2, 1, {13}},
  67.   {5, 3, 1, {13}},
  68.   {6, 2, 1, {13}},
  69.   {2, 2, 0}  /* 20 */
  70. };
  71. int m;
  72.  
  73. /* get i, j */
  74.  if ((type == 1) || (type == 3))
  75.     *i = 18 - tree[*cnd].i;   /* inverted */
  76.  else
  77.     *i = tree[*cnd].i;
  78.  if ((type == 2) || (type == 3))
  79.     *j = 18 - tree[*cnd].j;   /* reflected */
  80.  else
  81.     *j = tree[*cnd].j;
  82.  if (tree[*cnd].ndct)  /* more move */
  83.    {
  84.     random(&rd);
  85.     m = rd % tree[*cnd].ndct;  /* select move */
  86.     *cnd = tree[*cnd].next[m];    /* new    current node */
  87.     return 1;
  88.   }
  89.  else
  90.     return 0;
  91. }  /* end opening */
  92.  
  93.